﻿///<reference path="../../../Scripts/jquery-1.4.1-vsdoc.js"/>
///<reference path="../utils/Utils.js"/>
///<reference path="BiblePlayer.js"/>
///<reference path="../controls/TreeViewBase.js"/>
///<reference path="../plugins/jquery.xslt.js"/>

//основной объект системы
function AppPlayer(options) {
    ///public properties/////////////    
    this.BiblePlayer;
    this.ServerManager;
    this.CacheManager;
    this.CommandProcessor;
    this.Logger;
    this.KeyManager;


    ///UI Controllers///////////////////
    this.NavigationPaneController;
    this.MainPaneController;
    this.ToolsPaneController;
    

    ///private properties////////////

    // значения по умолчанию
    this.appConfig = {
        bibleFolder: "../data/bible",        
        navigationPaneId: "navigationPane",
        mainPaneId: "mainPane",
        toolsPaneId: "toolsPane",
        loadingPaneId: "loadingPane",
        mainTableId: "mainTable",
        bibleMapXmlFileName: "map.xml",
        isOnLine: true,
        isDebug: false
    };
    this.appConfig = $.extend(this.appConfig, options);  // заменяем значения переданными


    this.Init = function () {        
        this.ServerManager = new ServerManager(this.appConfig.isOnLine);
        this.CacheManager = new CacheManager();
        this.CommandProcessor = new CommandProcessor();
        this.Logger = new Logger(this.appConfig.isDebug);
        this.KeyManager = new KeyManager();

        this.BiblePlayer = new BiblePlayer({
            bibleFolder: this.appConfig.bibleFolder,
            bibleMapXmlFileName: this.appConfig.bibleMapXmlFileName
        });
        this.BiblePlayer.Init(OnBiblePlayerInitCompleted);
    }

    this.InitUI = function () {
        this.NavigationPaneController = new NavigationPaneController(this.appConfig.navigationPaneId);
        this.NavigationPaneController.Init();

        this.ToolsPaneController = new ToolsPaneController(this.appConfig.toolsPaneId);
        this.ToolsPaneController.Init();

        this.MainPaneController = new MainPaneController(this.appConfig.mainPaneId);
        this.MainPaneController.Init();

        

        this.ClearUI();
        $(window).resize(function () { ChangeWindowHeight(true); });
    }

    this.ClearUI = function () {
        this.MainPaneController.ClearUI();
    }

    function ChangeWindowHeight(first) {
        $(".windowFullHeight").each(function () {
            var el = $(this);
            el.height($(window).height() - $("#logoPane").height() - el.offset().top);

            if (first) {
                window.setTimeout(function () { ChangeWindowHeight(false); }, 100);  // иначе когда сразу сворачиваем / разворачиваем окно - не работает
            }
        });        
    }   
   
    function OnBiblePlayerInitCompleted() {
        appPointer.InitUI();
        
        var callwrapper = new CCallWrapper(appPointer.CacheManager, 1, 'InitializeCache', 1);
        CCallWrapper.asyncExecute(callwrapper);         //асинхронно загружаем данные в кэш       
        

        $("#" + appPointer.appConfig.loadingPaneId).hide();
        $(window).resize();
        $("#" + appPointer.appConfig.mainTableId).show();

        //todo: не работает с off-line версией        
        appPointer.CommandProcessor.Init(function () { appPointer.ClearUI() });  // возможно надо будет запсукать обработку текущей комнды после того, как данные из кэша загрузятся... хотя наврядли
    }
}